{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# USAD在WADI数据集上实验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np \n",
    "import os\n",
    "import pickle\n",
    "from torch.utils.data import DataLoader\n",
    "from torch.utils.data.sampler import SubsetRandomSampler\n",
    "import torch\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from usad_model import  *\n",
    "import sys\n",
    "sys.path.append('../common/')\n",
    "from evaluator import *\n",
    "from utils import *\n",
    "import random\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr=1e-4\n",
    "num_epochs=70\n",
    "window_size = 10\n",
    "z_dim = 100\n",
    "batch_size = 1024\n",
    "\n",
    "dataset_name = \"WADI\"\n",
    "general_path = \"%s-batch-%s-epochs-%s-hidden-%s\" %(dataset_name, batch_size, num_epochs, z_dim)\n",
    "\n",
    "model_path = \"../model/USAD/\" + general_path + \".pth\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 预处理标准化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def convert_to_windows(data, window_size):\n",
    "    windows = []\n",
    "    length  = data.shape[0]\n",
    "    for i in range(length):\n",
    "        if length - i >= window_size:\n",
    "            window = data[i:i+window_size]\n",
    "        else:\n",
    "            window = data[i-window_size+1:i+1]\n",
    "        windows.append(window)    \n",
    "    return np.array(windows)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "# 正常数据\n",
    "train = pd.read_csv(\"../data/WADI/WADI_14days.csv\",sep=',', skiprows=[0,1,2,3],skip_blank_lines=True)\n",
    "train = train.drop(train.columns[[0,1,2,50,51,86,87]],axis=1) # 去掉空白列和时间列\n",
    "train = train.astype(float)\n",
    "# 降采样\n",
    "down_sampling_rate = 1\n",
    "train=train.groupby(np.arange(len(train.index)) // down_sampling_rate).mean()\n",
    "min_max_scaler = MinMaxScaler()\n",
    "x = train.values\n",
    "x_scaled = min_max_scaler.fit_transform(x)\n",
    "train = pd.DataFrame(x_scaled).fillna(0).values\n",
    "\n",
    "# 异常数据\n",
    "test = pd.read_csv(\"../data/WADI/WADI_attackdata.csv\",sep=\",\")\n",
    "test=test.drop(test.columns[[0,1,2,50,51,86,87]],axis=1)\n",
    "test=test.astype(float)\n",
    "test=test.groupby(np.arange(len(test.index)) // down_sampling_rate).mean()\n",
    "test = min_max_scaler.transform(test.values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(172801,)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels = np.loadtxt('../data/WADI/label.csv')\n",
    "labels.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1209601, 10, 123)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 转换为时间窗口\n",
    "train_window = convert_to_windows(train, window_size)\n",
    "train_window.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(172801, 10, 123)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_window = convert_to_windows(test, window_size)\n",
    "test_window.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_dataset = torch.from_numpy(train_window).float().view([train_window.shape[0], train_window.shape[1]*train_window.shape[2]])\n",
    "test_dataset =  torch.from_numpy(test_window).float().view([test_window.shape[0], test_window.shape[1]*test_window.shape[2]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1209601"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_window.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "train_gaussian_percentage  = 0.25\n",
    "indices = np.random.permutation(len(train_dataset))\n",
    "split_point = int(train_gaussian_percentage * len(train_dataset))\n",
    "train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, drop_last=True,\n",
    "                            sampler=SubsetRandomSampler(indices[:-split_point]), pin_memory=False)\n",
    "val_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, drop_last=True,\n",
    "                        sampler=SubsetRandomSampler(indices[-split_point:]),pin_memory=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 70/70 [41:31<00:00, 35.59s/it]\n"
     ]
    }
   ],
   "source": [
    "model = UsadModel(train[0].shape[0]*window_size, z_dim)\n",
    "history = model.fit(\n",
    "    train_loader=train_loader,\n",
    "    validation_loader=val_loader,\n",
    "    epochs=num_epochs\n",
    ")\n",
    "\n",
    "torch.save({\n",
    "    'encoder': model.encoder.state_dict(),\n",
    "    'decoder1': model.decoder1.state_dict(),\n",
    "    'decoder2': model.decoder2.state_dict()\n",
    "    }, model_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHHCAYAAACvJxw8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACcL0lEQVR4nOzdeVxU5f7A8c/MsCuI4IIoigsqmmlpKpZbrlldLa+Vt02zuvVzKSktq1t5W2x1zfa9m7eyxVtmJiIuKe6auyCpKAgIiqBsw8z5/XE4wwzMDPsy8H2/XrxgzvqcZwbOl+f5Ps/RKYqiIIQQQggh7NLXdQGEEEIIIeozCZaEEEIIIZyQYEkIIYQQwgkJloQQQgghnJBgSQghhBDCCQmWhBBCCCGckGBJCCGEEMIJCZaEEEIIIZyQYEkIIYQQwgkJloQQwgXs2rWLQYMG0aRJE3Q6Hfv376/rIlXK559/jk6nY/fu3XVdFCHKTYIlIeoZuZnUDq2evby8SEpKKrV+2LBhXHXVVXVQstKMRiOTJk3iwoULLFq0iK+++ooOHTrUdbGEaDTc6roAQghRl/Lz83nttddYtmxZXRfFoYSEBE6fPs1HH33Egw8+WNfFEaLRkZYlIUSj1qdPHz766COSk5PruigOpaWlAeDv71+3BRGikZJgSQgXtW/fPm666Sb8/Pxo2rQpI0aMYPv27TbbGI1G5s+fT1hYGF5eXgQGBnLDDTcQFRVl2SYlJYWpU6fSrl07PD09adOmDePHj+fUqVM2x/rtt98YPHgwTZo0wdfXl5tvvpnDhw/bbFPeY1l766230Ol0nD59utS6efPm4eHhwcWLFwGIj49n4sSJBAUF4eXlRbt27bjrrru4dOlSBWuv2DPPPIPJZOK1114rc9vCwkJeeuklOnfujKenJ6GhoTzzzDPk5+dX+vwbNmyw1Ku/vz/jx4/n6NGjlvVTpkxh6NChAEyaNAmdTsewYcOcHjMzM5PHH3+ckJAQPD096dKlC6+//jpms9myzalTp9DpdLz11lssWrSIDh064O3tzdChQzl06FCFy6lJSkpi2rRpBAcH4+npSceOHXn00UcpKCiw2S4/P5/IyEhatmxJkyZNuO222zh//rzNNrt372bMmDG0aNECb29vOnbsyAMPPFBmnQpR3aQbTggXdPjwYQYPHoyfnx9z587F3d2dDz74gGHDhrFp0yYGDBgAwIsvvsiCBQt48MEH6d+/P1lZWezevZu9e/cyatQoACZOnMjhw4eZOXMmoaGhpKWlERUVRWJiIqGhoQB89dVX3H///YwZM4bXX3+dnJwc3nvvPW644Qb27dtn2a48xyrpjjvuYO7cuXz33XfMmTPHZt13333H6NGjad68OQUFBYwZM4b8/HxmzpxJUFAQSUlJrF69mszMTJo1a1apuuzYsSP33XcfH330EU8//TTBwcEOt33wwQf54osv+Pvf/84TTzzBjh07WLBgAUePHuWnn36q8LnXr1/PTTfdRKdOnXjxxRfJzc1l2bJlXH/99ezdu5fQ0FD++c9/0rZtW1599VVmzZrFddddR+vWrR0eMycnh6FDh5KUlMQ///lP2rdvz7Zt25g3bx7nzp1j8eLFNtt/+eWXZGdnM336dPLy8liyZAk33ngjBw8etJynPOUESE5Opn///mRmZvLwww/TvXt3kpKS+P7778nJycHDw8Ny3pkzZ9K8eXNeeOEFTp06xeLFi5kxYwbffvstoLamjR49mpYtW/L000/j7+/PqVOn+PHHHytcz0JUmSKEqFc+++wzBVB27drlcJsJEyYoHh4eSkJCgmVZcnKy4uvrqwwZMsSyrHfv3srNN9/s8DgXL15UAOXNN990uE12drbi7++vPPTQQzbLU1JSlGbNmlmWl+dYjkRERCh9+/a1WbZz504FUL788ktFURRl3759CqCsXLmywse3x7qeExISFDc3N2XWrFmW9UOHDlV69uxpeb1//34FUB588EGb4zz55JMKoGzYsKHCZejTp4/SqlUrJSMjw7Lszz//VPR6vXLfffdZlsXExJT72l966SWlSZMmSlxcnM3yp59+WjEYDEpiYqKiKIpy8uRJBVC8vb2Vs2fPWrbbsWOHAiizZ8+ucDnvu+8+Ra/X2/3sms1mRVGK633kyJGWZYqiKLNnz1YMBoOSmZmpKIqi/PTTT2X+HghRW6QbTggXYzKZWLduHRMmTKBTp06W5W3atOEf//gHf/zxB1lZWYCa43L48GHi4+PtHsvb2xsPDw82btxo6eoqKSoqiszMTCZPnkx6errly2AwMGDAAGJiYsp9LEfuvPNO9uzZQ0JCgmXZt99+i6enJ+PHjwewtBz9/vvv5OTkVOj4ZenUqRP33nsvH374IefOnbO7zZo1awCIjIy0Wf7EE08A8Ouvv1bonOfOnWP//v1MmTKFgIAAy/Krr76aUaNGWc5XUStXrmTw4ME0b97c5v0aOXIkJpOJzZs322w/YcIE2rZta3ndv39/BgwYYDl/ectpNptZtWoVt956K/369StVLp1OZ/P64Ycftlk2ePBgTCaTpTtWy89avXo1RqOxUnUhRHWRYEkIF3P+/HlycnLo1q1bqXXh4eGYzWbOnDkDwL///W8yMzPp2rUrvXr1Ys6cORw4cMCyvaenJ6+//jq//fYbrVu3ZsiQIbzxxhukpKRYttECrRtvvJGWLVvafK1bt86SfFyeYzkyadIk9Hq9pQtGURRWrlxpyckCtbssMjKSjz/+mBYtWjBmzBiWL19epXwla8899xyFhYUOc5dOnz6NXq+nS5cuNsuDgoLw9/e3m3PljLa9o/cxPT2dK1euVOiYoL5fa9euLfVejRw5EihOFteEhYWVOkbXrl0teWblLef58+fJysoq93QL7du3t3ndvHlzAEugPXToUCZOnMj8+fNp0aIF48eP57PPPqtSfpgQlSXBkhAN2JAhQ0hISODTTz/lqquu4uOPP+baa6/l448/tmzz+OOPExcXx4IFC/Dy8uJf//oX4eHh7Nu3D8CSFPzVV18RFRVV6ut///tfuY/lSHBwMIMHD+a7774DYPv27SQmJnLnnXfabPf2229z4MABnnnmGXJzc5k1axY9e/bk7NmzVa6rTp06cc899zhtXYLSLST1jdlsZtSoUXbfq6ioKCZOnFjXRQTAYDDYXa4oCqDW8/fff09sbCwzZswgKSmJBx54gL59+3L58uXaLKoQkrMkRH1TVs5SYWGh4uPjo9xxxx2l1j3yyCOKXq9XLl26ZHff7Oxs5ZprrlHatm3r8PxxcXGKj4+PcvfddyuKoijfffedAii///57ha+l5LGceffddxVAOXbsmPLYY48pPj4+yuXLl53us3XrVgVQnn322QqXzV49nzhxQnFzc1Mee+yxUjlLr776qgIoR44csTlOSkqKAihPPPFEhc6fnJysAMrcuXNLrRs7dqzSokULy+uK5Cz16NFDiYiIKHM7LWdp8uTJpdYNGDBA6datW4XKaTKZFD8/P2X8+PFOz+vo861dY0xMjMN9v/76awVQPvroozKuTojqJS1LQrgYg8HA6NGj+d///mczJD81NZUVK1Zwww03WLquMjIybPZt2rQpXbp0sXRl5OTkkJeXZ7NN586d8fX1tWwzZswY/Pz8ePXVV+3mjmjDvctzLGcmTpyIwWDgv//9LytXruSWW26hSZMmlvVZWVkUFhba7NOrVy/0er3N8RMTEzl27FiZ57Onc+fO3HPPPXzwwQelug/HjRsHUGo02cKFCwG4+eabLcsSEhJs8q/sadOmDX369OGLL74gMzPTsvzQoUOsW7fOcr6KuuOOO4iNjeX3338vtS4zM7NUHa5atcpmBvOdO3eyY8cObrrppgqVU6/XM2HCBH755Re7s88rRS1G5XXx4sVS+/Tp0wdAuuJErZOpA4Sopz799FPWrl1bavljjz3Gyy+/TFRUFDfccAP/93//h5ubGx988AH5+fm88cYblm179OjBsGHD6Nu3LwEBAezevZvvv/+eGTNmABAXF8eIESO444476NGjB25ubvz000+kpqZy1113AeDn58d7773Hvffey7XXXstdd91Fy5YtSUxM5Ndff+X666/nnXfeKdexnGnVqhXDhw9n4cKFZGdnl+qC27BhAzNmzGDSpEl07dqVwsJCvvrqKwwGg03X0n333cemTZsqfHPWPPvss3z11VccP36cnj17Wpb37t2b+++/nw8//JDMzEyGDh3Kzp07+eKLL5gwYQLDhw+3bDtixAgAp/NLAbz55pvcdNNNREREMG3aNMuQ/GbNmvHiiy9Wqvxz5szh559/5pZbbmHKlCn07duXK1eucPDgQb7//ntOnTpFixYtLNt36dKFG264gUcffZT8/HwWL15MYGAgc+fOrXA5X331VdatW8fQoUN5+OGHCQ8P59y5c6xcuZI//vijQpNqfvHFF7z77rvcdtttdO7cmezsbD766CP8/PwqHUgKUWl13LIlhChB66Zw9HXmzBlFURRl7969ypgxY5SmTZsqPj4+yvDhw5Vt27bZHOvll19W+vfvr/j7+yve3t5K9+7dlVdeeUUpKChQFEVR0tPTlenTpyvdu3dXmjRpojRr1kwZMGCA8t1335UqV0xMjDJmzBilWbNmipeXl9K5c2dlypQpyu7duyt8LEc++ugjBVB8fX2V3Nxcm3V//fWX8sADDyidO3dWvLy8lICAAGX48OHK+vXrbbYbOnSoUp4/bc66O++//34FsOmGUxRFMRqNyvz585WOHTsq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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_history(history)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test finished\n"
     ]
    }
   ],
   "source": [
    "test_loader = DataLoader(dataset = test_dataset, batch_size=batch_size, shuffle=False, drop_last=False)\n",
    "\n",
    "model = UsadModel(test[0].shape[0]*window_size, z_dim)\n",
    "checkpoint = torch.load(model_path, map_location=get_default_device())\n",
    "model.encoder.load_state_dict(checkpoint['encoder'])\n",
    "model.decoder1.load_state_dict(checkpoint['decoder1'])\n",
    "model.decoder2.load_state_dict(checkpoint['decoder2'])\n",
    "model.to(get_default_device())\n",
    "pred= model.predict_prob(test_loader, alpha=0.5, beta=0.5)\n",
    "\n",
    "print(\"test finished\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "results_without_adjust = bf_search(labels.squeeze(), pred, verbose=False, is_adjust=False)\n",
    "results_adjust  = bf_search(labels.squeeze(), pred, verbose=False, is_adjust=True) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'f1-score': 0.26348748393693844,\n",
       " 'precision': 0.9665809706517933,\n",
       " 'recall': 0.15253549680270234,\n",
       " 'TP': 1504.0,\n",
       " 'TN': 162889.0,\n",
       " 'FP': 52.0,\n",
       " 'FN': 8356.0,\n",
       " 'threshold': 585.1715332031246}"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results_without_adjust"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'f1-score': 0.4480173501759179,\n",
       " 'precision': 0.7446958964057145,\n",
       " 'recall': 0.3203853952125909,\n",
       " 'TP': 3159.0,\n",
       " 'TN': 161858.0,\n",
       " 'FP': 1083.0,\n",
       " 'FN': 6701.0,\n",
       " 'threshold': 585.05712890625}"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results_adjust"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
